package app.models;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import javax.persistence.Transient;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;


@Entity
@Table(name = "PRODUTO")
public class Produto implements Pojo {
	
	private static final long serialVersionUID = -1395700544192288321L;

	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	@Column(name = "ID")
	private Long id;
	
	@NotNull(message = "{nome.empty}")
	@Column(name = "NOME", columnDefinition = "varchar(50)")
	private String nome;
	
	@Min(value = 0, message = "{valor.empty}")
	@Column(name = "VALOR_UNITARIO", columnDefinition = "double")
	private Double valorUnitario;
	
	@NotNull(message = "{fornecedor.empty}")
	@Column(name = "ID_FORNECEDOR")
	private Integer idFornecedor;
	
	@OneToOne(fetch = FetchType.EAGER)
	@JoinColumn(name = "ID_FORNECEDOR", referencedColumnName = "ID", insertable = false, updatable = false)
	private Fornecedor fornecedor;
	
	@Transient
	private String valorUnitarioString;
	
	@Min(value = 1, message = "{quantidade.empty}")
	@Column(name = "QUANTIDADE", columnDefinition = "integer")
	private Integer quantidade;
	
	@Override
	public Long getId() {
		return id;
	}

	public String getValorUnitarioString() {
		return valorUnitarioString;
	}

	public void setValorUnitarioString(String valorUnitarioString) {
		this.valorUnitarioString = valorUnitarioString;
	}

	@Override
	public void setId(Long id) {
		this.id = id;
	}
	
	public String getNome() {
		return nome;
	}

	public Integer getQuantidade() {
		return quantidade;
	}

	public void setQuantidade(Integer quantidade) {
		this.quantidade = quantidade;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public Double getValorUnitario() {
		return valorUnitario;
	}

	public void setValorUnitario(Double valorUnitario) {
		this.valorUnitario = valorUnitario;
	}

	public Integer getIdFornecedor() {
		return idFornecedor;
	}

	public void setIdFornecedor(Integer idFornecedor) {
		this.idFornecedor = idFornecedor;
	}

	public Fornecedor getFornecedor() {
		return fornecedor;
	}

	public void setFornecedor(Fornecedor fornecedor) {
		this.fornecedor = fornecedor;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((id == null) ? 0 : id.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj) {
			return true;
		}
		if (obj == null) {
			return false;
		}
		if (getClass() != obj.getClass()) {
			return false;
		}
		Produto other = (Produto) obj;
		if (id == null) {
			if (other.id != null) {
				return false;
			}
		} else if (!id.equals(other.id)) {
			return false;
		}
		return true;
	}

}
